from ronglian_sms_sdk import SmsSDK
import random
from django.conf import settings
import json
import logging

logger = logging.getLogger(__name__)

class SMS:
    def __init__(self):
        # 容联云配置信息
        self.accId = '2c94811c946f6bfb0195fa4c84cc4430'  # 请替换为您的容联云账号ID
        self.accToken = '32391130dd2040f1816217f375bc0fc9'  # 请替换为您的容联云账号Token
        self.appId = '2c94811c946f6bfb0195fa4c869d4437'  # 请替换为您的容联云应用ID
        self.sdk = SmsSDK(self.accId, self.accToken, self.appId)

    def send_sms(self, mobile, code):
        """
        发送短信验证码
        :param mobile: 手机号
        :param code: 验证码
        :return: 发送结果
        """
        try:
            # 记录调试信息
            logger.debug(f"准备发送短信: mobile={mobile}, code={code}, type(code)={type(code)}")
            
            # 确保code是字符串类型
            if not isinstance(code, str):
                code = str(code)
                
            # 短信模板ID，需要在容联云后台配置
            templateId = 1  # 请替换为您的模板ID
            
            # 短信参数，根据模板配置
            datas = (code, '5')  # 验证码和有效期
            
            # 在开发/测试环境下，可以模拟发送短信
            if settings.DEBUG:
                logger.info(f"[测试模式] 向 {mobile} 发送验证码: {code}")
                return True, '测试环境下模拟发送成功'
                
            # 发送短信
            logger.debug(f"调用SDK发送短信: templateId={templateId}, mobile={mobile}, datas={datas}")
            resp = self.sdk.sendMessage(templateId, mobile, datas)
            logger.debug(f"SDK返回结果: {resp}")
            
            # 确保resp是字符串
            if not isinstance(resp, str):
                logger.warning(f"SDK返回的resp不是字符串: {type(resp)}")
                resp = str(resp)
                
            result = json.loads(resp)
            if result.get('statusCode') == '000000':
                return True, '发送成功'
            else:
                return False, result.get('statusMsg', '未知错误')
        except Exception as e:
            logger.error(f"发送短信异常: {str(e)}")
            import traceback
            logger.error(traceback.format_exc())
            return False, f"发送短信异常: {str(e)}"

    def generate_code(self):
        """
        生成6位数字验证码
        :return: 验证码
        """
        return ''.join(random.choices('0123456789', k=4))

# 创建全局SMS实例
sms = SMS() 